package org.metasketch.ham.diagrams;

import org.metasketch.diagram.javafx.graphics.DefaultLink;
import org.metasketch.diagram.javafx.graphics.HorizontalLinkLabelPosition;
import org.metasketch.diagram.javafx.graphics.LinkEndBuilder;
import org.metasketch.diagram.javafx.graphics.PositionedLabel;
import org.metasketch.diagram.javafx.graphics.VerticalLinkLabelPosition;
import org.metasketch.editor.links.LinkEndType;
import org.metasketch.ham.model.HumanActivityRelationLink;
import org.metasketch.ham.model.HumanActivityRelationType;

public class ActivityRelationshipLink extends DefaultLink {

	PositionedLabel label = new PositionedLabel();

	public ActivityRelationshipLink() {
		{
			// PositionedLabel label1 = new PositionedLabel();
			label.getLabel().setText("Center,Center");
			label.setHorizontal(HorizontalLinkLabelPosition.CENTER);
			label.setVertical(VerticalLinkLabelPosition.TOP);
			labels.add(label);
		}

		// {
		// PositionedLabel label1 = new PositionedLabel();
		// label1.getLabel().setText("Source,Center");
		// label1.setVertical(VerticalLinkLabelPosition.CENTER);
		// label1.setHorizontal(HorizontalLinkLabelPosition.SOURCE);
		// labels.add(label1);
		// }
		//
		// {
		// PositionedLabel label1 = new PositionedLabel();
		// label1.getLabel().setText("Target,Center");
		// label1.setVertical(VerticalLinkLabelPosition.CENTER);
		// label1.setHorizontal(HorizontalLinkLabelPosition.TARGET);
		// labels.add(label1);
		// }
		//
		// {
		// PositionedLabel label1 = new PositionedLabel();
		// label1.getLabel().setText("Center,Top");
		// label1.setVertical(VerticalLinkLabelPosition.TOP);
		// label1.setHorizontal(HorizontalLinkLabelPosition.CENTER);
		// labels.add(label1);
		// }
		//
		// {
		// PositionedLabel label1 = new PositionedLabel();
		// label1.getLabel().setText("Source,Top");
		// label1.setVertical(VerticalLinkLabelPosition.TOP);
		// label1.setHorizontal(HorizontalLinkLabelPosition.SOURCE);
		// labels.add(label1);
		// }
		//
		// {
		// PositionedLabel label1 = new PositionedLabel();
		// label1.getLabel().setText("Target,Top");
		// label1.setVertical(VerticalLinkLabelPosition.TOP);
		// label1.setHorizontal(HorizontalLinkLabelPosition.TARGET);
		// labels.add(label1);
		// }
		//
		// {
		// PositionedLabel label1 = new PositionedLabel();
		// label1.getLabel().setText("Center,Bottom");
		// label1.setVertical(VerticalLinkLabelPosition.BOTTOM);
		// label1.setHorizontal(HorizontalLinkLabelPosition.CENTER);
		// labels.add(label1);
		// }
		//
		// {
		// PositionedLabel label1 = new PositionedLabel();
		// label1.getLabel().setText("Source,Bottom");
		// label1.setVertical(VerticalLinkLabelPosition.BOTTOM);
		// label1.setHorizontal(HorizontalLinkLabelPosition.SOURCE);
		// labels.add(label1);
		// }
		//
		// {
		// PositionedLabel label1 = new PositionedLabel();
		// label1.getLabel().setText("Target,Bottom");
		// label1.setVertical(VerticalLinkLabelPosition.BOTTOM);
		// label1.setHorizontal(HorizontalLinkLabelPosition.TARGET);
		// labels.add(label1);
		// }
	}

	@Override
	protected void refreshModelGraphic() {
		super.refreshModelGraphic();

		if (semantic == null)
			return;

		HumanActivityRelationLink relation = (HumanActivityRelationLink) semantic;
		HumanActivityRelationType type = relation.getType();

		if (type == HumanActivityRelationType.PRECEDES) {

			if (relation.getSource() == source.getSemantic())
				LinkEndBuilder.buildEnd(this, getLastSection(),
						LinkEndType.ARROW, false);
			else
				LinkEndBuilder.buildEnd(this, getFirstSection(),
						LinkEndType.ARROW, true);

		} else if (type == HumanActivityRelationType.CONCURRENT
				|| type == HumanActivityRelationType.INTERLEAVED) {

			LinkEndBuilder.buildEnd(this, getLastSection(), LinkEndType.ARROW,
					false);

			LinkEndBuilder.buildEnd(this, getFirstSection(), LinkEndType.ARROW,
					true);

		} else if (type == HumanActivityRelationType.CONTAINS) {

			// LinkEndBuilder.buildEnd(this, getFirstSection(),
			// LinkEndType.ARROW,
			// true);
		}

		// LinkEndBuilder.buildEnds(this);
		label.getLabel().setText(type.toString());

		// getChildren().add(label);
	}

	// public void refreshLineDecorations() {
	// // int rest = lines.size() % 2;
	// // if (rest == 0) {
	// // // get the middle control point
	// // int index = lines.size() / 2 - 1;
	// // LineSection line = lines.get(index);
	// // int x = (int) line.getEndX();
	// // int y = (int) line.getEndY();
	// //
	// // x -= label.getWidth() / 2;
	// // y -= 20;
	// //
	// // label.setTranslateX(x);
	// // label.setTranslateY(y);
	// //
	// // } else {
	// // int index = lines.size() / 2;
	// // LineSection line = lines.get(index);
	// //
	// // int x = (int) (line.getStartX() + (line.getEndX() - line
	// // .getStartX()) * 0.5);
	// // int y = (int) (line.getStartY() + (line.getEndY() - line
	// // .getStartY()) * 0.5);
	// //
	// // x -= label.getWidth() / 2;
	// // y -= 20;
	// //
	// // label.setTranslateX(x);
	// // label.setTranslateY(y);
	// // }
	//
	// }

}
